package com.jf.cloud.order.service;

import com.jf.cloud.common.database.dto.PageDTO;
import com.jf.cloud.common.database.vo.PageVO;
import com.jf.cloud.common.order.dto.OrderVirtualInfoDTO;
import com.jf.cloud.common.order.vo.OrderVirtualInfoVO;
import com.jf.cloud.order.model.Order;
import com.jf.cloud.order.model.OrderVirtualInfo;
import com.jf.cloud.order.vo.OrderShopVO;

import java.util.List;

public interface OrderVirtualInfoService {
    /**
     * 分页获取订单虚拟商品信息列表
     * @param pageDTO 分页参数
     * @return 订单虚拟商品信息列表分页数据
     */
    PageVO<OrderVirtualInfo> page(PageDTO pageDTO);

    /**
     * 根据订单虚拟商品信息id获取订单虚拟商品信息
     *
     * @param id 订单虚拟商品信息id
     * @return 订单虚拟商品信息
     */
    OrderVirtualInfo getById(Long id);

    /**
     * 保存订单虚拟商品信息
     * @param orderVirtualInfo 订单虚拟商品信息
     */
    void save(OrderVirtualInfo orderVirtualInfo);

    /**
     * 更新订单虚拟商品信息
     * @param orderVirtualInfo 订单虚拟商品信息
     */
    void update(OrderVirtualInfoVO orderVirtualInfo);

    /**
     * 根据订单虚拟商品信息id删除订单虚拟商品信息
     * @param id 订单虚拟商品信息id
     */
    void deleteById(Long id);

    /**
     * 批量保存虚拟订单信息
     * @param orderVirtualInfoList
     */
    void saveBatch(List<OrderVirtualInfo> orderVirtualInfoList);

    /**
     * 获取虚拟订单卡券信息
     * @param order
     * @param orderShopVO
     * @param stationId
     */
    void handlerVirtualProdOrder(Order order, OrderShopVO orderShopVO, Long stationId);

    /**
     * 根据订单id和自提点id获取虚拟订单
     * @param orderId
     * @param stationId
     * @return
     */
    List<OrderVirtualInfoVO> getByOrderIdAndStationId(Long orderId, Long stationId);

    /**
     * 根据订单id和店铺id获取虚拟订单
     * @param orderId
     * @param shopId
     * @param isWriteOff 1.已核销 0.未核销
     */
    List<OrderVirtualInfoVO> getByOrderIdAndShopId(Long orderId, Long shopId, Integer isWriteOff);

    /**
     * 用户卡券订单核销操作
     * @param orderVirtualInfoDTO 订单核销信息
     * @param order 订单信息
     * @param stationId 门店id
     * @return 是否核销成功
     */
    Boolean orderWriteOffByOrderId(OrderVirtualInfoDTO orderVirtualInfoDTO, Order order, Long stationId);

    /**
     * 根据订单id和核销码获取虚拟订单
     * @param orderId
     * @param code
     * @return
     */
    List<OrderVirtualInfoVO> getByOrderIdAndCode(Long orderId, String code);
}
